In many instances, hypervisors allow multiple operating systems executed by virtual machines to run simultaneously on the same physical hardware. These hypervisors can execute on top of an operating system, or can execute directly on the physical hardware of a computer (e.g. bare-metal hypervisors.) In some instances a virtual machine can execute a paravirtualized operating system or a non-paravirtualized operating system. Paravirtualized operating systems are typically operating systems that have been modified to execute within a virtualized environment, e.g. the LINUX operating system, and can access hardware components directly. Non-Paravirtualized operating systems are typically operating systems that have not been modified to execute within a virtualized environment, e.g. the WINDOWS operating system, and cannot access hardware components directly.
Rendering three-dimensional graphics typically requires a great deal of resources and in many embodiments requires directly accessing a graphics processing unit (GPU). In virtualized environments where multiple virtual machines may require access to the graphics processing unit at any one time, the GPU is virtualized by the hypervisor and access to the virtualized GPU may be managed by a control program. Three-dimensional applications that require rendering three-dimensional graphics, typically underperform in such virtualized environments because the three-dimensional applications are not provided with direct and exclusive access to the GPU. Non-paravirtualized operating systems typically require applications generating three-dimensional drawing commands to access a GPU through a set of interfaces and drivers. Thus, users of the three-dimensional application may experience significant delay in the rendering of three-dimensional images because the three-dimensional application does not have direct access to the GPU.
Virtualizing the GPU can be one solution for overcoming the problems associated with executing three-dimensional applications within the context of a non-paravirtualized operating system. While the virtualized GPU allows virtual machines to share access to a physical GPU, the virtual GPU does little to ensure that three-dimensional applications have exclusive access to the physical GPU or to remedy the direct access problems posed by the non-paravirtualized operating systems. Further, implementing a virtual GPU often requires the installation and execution of a virtual GPU designed for the provided physical GPU.
There exist technologies that remedy the problems associated with rendering three-dimensional graphics in a virtualized environment. These technologies, however, often function for only a select few three-dimensional graphics libraries, e.g. OpenGL. For other three-dimensional graphics libraries, e.g. Direct3D, no such technology exists. Furthermore, many of the technologies are only compatible with paravirtualized operating systems and not with non-paravirtualized operating systems.
There exist other technologies that remedy the problems associated with rendering three-dimensional graphics in a virtualized environment by transmitting three-dimensional graphics commands to a remote computer able to render the graphics. This remote computer can in some instances provided the direct GPU access required to quickly and efficiently render the three-dimensional images. Upon rendering the graphics, the remote computer can transmit the rendered graphics back to the virtual machine executing the three-dimensional application. Still other technologies provide a software graphics driver that provides access to a subset of the functionality provided by an available graphics processing units. Each of these solutions fails to leverage the functionality of the physical GPU and may introduce latency into the graphics processing process.